React ์ปดํฌ๋ํธ๋ฅผ ๋ ๊ฑฐ์ ํจํด์์ ์ต์ ๋ชจ๋ฒ ์ฌ๋ก๋ก ์๋ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ํฌ๊ด์ ์ธ ๊ฐ์ด๋. ๋ค์ํ ์ ๊ทผ๋ฒ, ์ด์ , ์ ์ฌ์ ๊ณผ์ ๋ฅผ ๋ค๋ฃน๋๋ค.
React ์๋ ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์ : ๋ ๊ฑฐ์์์ ์ต์ ํจํด์ผ๋ก์ ์ ํ
React๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋ชจ๋ฒ ์ฌ๋ก ๋ํ ๋ณํํฉ๋๋ค. ๋ง์ ํ๋ก์ ํธ์๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค ์ปดํฌ๋ํธ์ ๊ฐ์ ์ค๋๋ ํจํด์ผ๋ก ์์ฑ๋ ๋ ๊ฑฐ์ ์ปดํฌ๋ํธ๊ฐ ์ถ์ ๋ฉ๋๋ค. ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ํ (hooks)์ ์ฌ์ฉํ๋ ์ต์ ํจ์ํ ์ปดํฌ๋ํธ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด ์ฑ๋ฅ, ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์๋์ผ๋ก ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. ์ด ๊ธ์์๋ React ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์๋ํํ์ฌ ํ์ด ํจ์จ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ํํ ์ ์๋ ๊ธฐ์ ์ ์ดํด๋ด ๋๋ค.
์ React ์ปดํฌ๋ํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ ํ๋๊ฐ?
์๋ํ ์ ๋ต์ ์ดํด๋ณด๊ธฐ ์ ์ ๋ ๊ฑฐ์ React ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ด์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ํ
์ ์ฌ์ฉํ๋ ํจ์ํ ์ปดํฌ๋ํธ๋ ์ข
์ข
ํด๋์ค ์ปดํฌ๋ํธ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ ์์ผ๋ฉฐ, ํนํ ๋ฉ๋ชจ์ด์ ์ด์
(
React.memo)๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ํผํ ๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. - ๊ฐ๋ ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ ํฅ์: ํจ์ํ ์ปดํฌ๋ํธ๋ ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค ์ปดํฌ๋ํธ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํต๋๋ค.
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ํฅ์: ํ ์ ์ปดํฌ๋ํธ ๊ฐ์ ๋ก์ง์ ์ถ์ถํ๊ณ ๊ณต์ ํ ์ ์๊ฒ ํ์ฌ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ด์งํฉ๋๋ค.
- ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์:
this๋ฐ์ธ๋ฉ ๋ฐ ๊ธฐํ ํด๋์ค ๊ด๋ จ ์ค๋ฒํค๋๊ฐ ํ์ ์์ผ๋ฏ๋ก ํจ์ํ ์ปดํฌ๋ํธ๋ ๋ ์์ ๋ฒ๋ค ํฌ๊ธฐ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. - ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ๋ ๊ฒฝ์๋ ฅ ํ๋ณด: ์ต์ React ๊ฐ๋ฐ์ ํจ์ํ ์ปดํฌ๋ํธ์ ํ ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ด ํจ๋ฌ๋ค์์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ํฅํ React ์ ๋ฐ์ดํธ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ํธํ๋๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.
React์ ์ผ๋ฐ์ ์ธ ๋ ๊ฑฐ์ ํจํด
๋ง์ด๊ทธ๋ ์ด์ ํ๋ ค๋ ํจํด์ ์๋ณํ๋ ๊ฒ์ด ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ ๋๋ค. ์ค๋๋ React ์ฝ๋๋ฒ ์ด์ค์์ ๋ฐ๊ฒฌ๋๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ ๊ฑฐ์ ํจํด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค ์ปดํฌ๋ํธ:
class๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ ์๋๊ณcomponentDidMount,componentDidUpdate,componentWillUnmount์ ๊ฐ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋์ ์์กดํ๋ ์ปดํฌ๋ํธ. - ๋ฏน์ค์ธ(Mixins): ์ปดํฌ๋ํธ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ณต์ ํ๊ธฐ ์ํด ๋ฏน์ค์ธ์ ์ฌ์ฉํ๋ ๊ฒ (ํ๋ React์์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์๋ ํจํด).
- ๋ฌธ์์ด Ref: ์ฝ๋ฐฑ ref๋
React.createRef๋์ ๋ฌธ์์ด ref(์:ref="myInput")๋ฅผ ์ฌ์ฉํ๋ ๊ฒ. - ํ์ ๊ฒ์ฌ ์๋ JSX ์คํ๋ ๋ ์์ฑ: prop ํ์ ์ ๋ช ์์ ์ผ๋ก ์ ์ํ์ง ์๊ณ prop์ ์คํ๋ ๋ํ๋ฉด ์๊ธฐ์น ์์ ๋์๊ณผ ์ ์ง๋ณด์์ฑ ์ ํ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
- ์ธ๋ผ์ธ ์คํ์ผ: CSS ํด๋์ค๋ ์คํ์ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ธ๋ผ์ธ ์คํ์ผ ์์ฑ(์:
<div style={{ color: 'red' }}></div>)์ ์ฌ์ฉํ์ฌ ์คํ์ผ์ ์ง์ ์ ์ฉํ๋ ๊ฒ.
React ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์ ์๋ํ ์ ๋ต
๋จ์ํ ์ฐพ๊ธฐ-๋ฐ๊พธ๊ธฐ ์์ ๋ถํฐ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ฅผ ์ฌ์ฉํ ๋ ์ ๊ตํ ์ฝ๋ ๋ณํ์ ์ด๋ฅด๊ธฐ๊น์ง, React ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์๋ํํ๋ ๋ฐ ์ฌ๋ฌ ์ ๋ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1. ๋จ์ ์ฐพ๊ธฐ ๋ฐ ๋ฐ๊พธ๊ธฐ (์ ํ๋ ๋ฒ์)
๋ณ์ ์ด๋ฆ ๋ณ๊ฒฝ์ด๋ prop ์ด๋ฆ ์
๋ฐ์ดํธ์ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ๋ง์ด๊ทธ๋ ์ด์
์ ๊ฒฝ์ฐ, ํ
์คํธ ํธ์ง๊ธฐ๋ ๋ช
๋ น์ค ๋๊ตฌ(sed ๋๋ awk ๋ฑ)๋ฅผ ์ฌ์ฉํ ๋จ์ ์ฐพ๊ธฐ ๋ฐ ๋ฐ๊พธ๊ธฐ ์์
์ผ๋ก ์ถฉ๋ถํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋จํ ๋ณ๊ฒฝ์๋ง ๊ตญํ๋๋ฉฐ ์ ์คํ๊ฒ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
์์:
componentWillMount์ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ UNSAFE_componentWillMount๋ก ๋ฐ๊พธ๊ธฐ (React ๋ฒ์ ์
๊ทธ๋ ์ด๋ ์ค ํ์ํ ๋จ๊ณ):
sed -i 's/componentWillMount/UNSAFE_componentWillMount/g' src/**/*.js
ํ๊ณ์ :
- ๋ณต์กํ ์ฝ๋ ๋ณํ์ ์ฒ๋ฆฌํ ์ ์์.
- ์คํ(false positives)์ ์ทจ์ฝํจ (์: ์ฃผ์์ด๋ ๋ฌธ์์ด ๋ด์ ํ ์คํธ๋ฅผ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ).
- ์ปจํ ์คํธ ์ธ์์ด ๋ถ์กฑํจ.
2. jscodeshift๋ฅผ ์ฌ์ฉํ ์ฝ๋๋ชจ๋
์ฝ๋๋ชจ๋๋ ๋ฏธ๋ฆฌ ์ ์๋ ๊ท์น์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๋ณํํ๋ ์คํฌ๋ฆฝํธ์
๋๋ค. jscodeshift๋ Facebook์์ ๊ฐ๋ฐํ ๊ฐ๋ ฅํ ํดํท์ผ๋ก, JavaScript ๋ฐ JSX ์ฝ๋์ ์ฝ๋๋ชจ๋๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ฅผ ํ์ฉํ์ฌ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ์ ๋ฐํ ๋ณํ์ ์ํํฉ๋๋ค.
jscodeshift ์๋ ๋ฐฉ์:
- ํ์ฑ:
jscodeshift๋ ์ฝ๋๋ฅผ ์ฝ๋ ๊ตฌ์กฐ์ ํธ๋ฆฌ ํํ ํํ์ธ AST๋ก ํ์ฑํฉ๋๋ค. - ๋ณํ: ์ํ๋ ๋ณํ์ ๋ฐ๋ผ AST๋ฅผ ์ํํ๊ณ ํน์ ๋ ธ๋๋ฅผ ์์ ํ๋ ์ฝ๋๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ถ๋ ฅ:
jscodeshift๋ ์์ ๋ AST๋ฅผ ๋ค์ ์ฝ๋๋ก ์ถ๋ ฅํฉ๋๋ค.
์์: ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ํจ์ํ ์ปดํฌ๋ํธ๋ก ๋ณํํ๊ธฐ
์ด๊ฒ์ ๋จ์ํ๋ ์์์ ๋๋ค. ๊ฐ๋ ฅํ ์ฝ๋๋ชจ๋๋ ์ํ ๊ด๋ฆฌ, ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋, ์ปจํ ์คํธ ์ฌ์ฉ๊ณผ ๊ฐ์ ๋ ๋ณต์กํ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
ํด๋์ค ์ปดํฌ๋ํธ (๋ ๊ฑฐ์):
import React, { Component } from 'react';
class MyComponent extends Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
render() {
return <div>Count: {this.state.count}</div>;
}
}
export default MyComponent;
์ฝ๋๋ชจ๋ (jscodeshift ์ฌ์ฉ):
module.exports = function transformer(file, api) {
const j = api.jscodeshift;
return j(file.source)
.find(j.ClassDeclaration, {
id: { type: 'Identifier', name: 'MyComponent' },
})
.replaceWith(path => {
const className = path.node.id.name;
return j.variableDeclaration('const', [
j.variableDeclarator(
j.identifier(className),
j.arrowFunctionExpression(
[],
j.blockStatement([
j.returnStatement(
j.jsxElement(
j.jsxOpeningElement(j.jsxIdentifier('div'), []),
j.jsxClosingElement(j.jsxIdentifier('div')),
[j.literal('Count: 0')]
)
)
])
)
)
]);
})
.toSource();
};
ํจ์ํ ์ปดํฌ๋ํธ (์ต์ ):
import React from 'react';
const MyComponent = () => {
return <div>Count: 0</div>;
};
export default MyComponent;
์ฝ๋๋ชจ๋ ์คํ:
jscodeshift -t my-codemod.js src/MyComponent.js
์ฝ๋๋ชจ๋ ์ฌ์ฉ์ ์ด์ :
- ์ ๋ฐํ ์ฝ๋ ๋ณํ: AST ๊ธฐ๋ฐ ๋ณํ์ ์ ํํ๊ณ ์ ๋ขฐํ ์ ์๋ ์ฝ๋ ์์ ์ ๋ณด์ฅํฉ๋๋ค.
- ์๋ํ: ๋ฐ๋ณต์ ์ธ ๋ฆฌํฉํ ๋ง ์์ ์ ์๋ํํ์ฌ ์๊ฐ์ ์ ์ฝํ๊ณ ์ค๋ฅ๋ฅผ ์ค์ ๋๋ค.
- ํ์ฅ์ฑ: ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅ์ฑ: ํน์ ์๊ตฌ์ ๋ง๋ ์ฌ์ฉ์ ์ ์ ๋ณํ ๊ท์น์ ์ ์ํ ์ ์์ต๋๋ค.
์ฝ๋๋ชจ๋ ์ฌ์ฉ์ ๊ณผ์ :
- ํ์ต ๊ณก์ : AST์
jscodeshiftAPI์ ๋ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค. - ๋ณต์ก์ฑ: ๋ณต์กํ ์ฝ๋๋ชจ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ํ ์คํธ: ์ฝ๋๋ชจ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ณ ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํ์ง ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒ ์ ํ ํ ์คํธ๊ฐ ์ค์ํฉ๋๋ค.
3. ์๋ ๋ฆฌํฉํ ๋ง ๋๊ตฌ (IDE ๋ฐ ๋ฆฐํฐ)
๋ง์ IDE์ ๋ฆฐํฐ๋ ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ง์ํ ์ ์๋ ์๋ ๋ฆฌํฉํ ๋ง ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ ํ ํ๋ฌ๊ทธ์ธ์ด ํฌํจ๋ ESLint์ ๊ฐ์ ๋๊ตฌ๋ ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ํจ์ํ ์ปดํฌ๋ํธ๋ก ์๋ ๋ณํํ๊ฑฐ๋ ์ฝ๋ ๊ฐ์ ์ฌํญ์ ์ ์ํ ์ ์์ต๋๋ค.
์์: eslint-plugin-react-hooks๋ฅผ ์ฌ์ฉํ ESLint
eslint-plugin-react-hooks ํ๋ฌ๊ทธ์ธ์ ํ
์ ๊ท์น์ ๊ฐ์ ํ๊ณ React ์ปดํฌ๋ํธ์์ ํ
์ ์ฌ์ฉํ๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ํ๋ ๊ท์น์ ์ ๊ณตํฉ๋๋ค. ๋ํ useEffect ๋ฐ useCallback์ ์์กด์ฑ ๋ฐฐ์ด์ ๋๋ฝ๋ ์์กด์ฑ๊ณผ ๊ฐ์ ์ผ๋ถ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ์์ ํ ์ ์์ต๋๋ค.
์ด์ :
- ์ฌ์ฉ ์ฉ์ด์ฑ: IDE ํตํฉ ๋๊ตฌ๋ ์ข ์ข ์ฌ์ฉ์ ์ ์ ์ฝ๋๋ชจ๋๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ฌ์ฉํ๊ธฐ ์ฝ์ต๋๋ค.
- ์ค์๊ฐ ํผ๋๋ฐฑ: ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ค์๊ฐ ํผ๋๋ฐฑ๊ณผ ์ ์์ ์ ๊ณตํฉ๋๋ค.
- ๋ชจ๋ฒ ์ฌ๋ก ๊ฐ์ : React ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ฐ์ ํ๊ณ ์ผ๋ฐ์ ์ธ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํ๊ณ์ :
- ์ ํ๋ ๋ฒ์: ๋ณต์กํ ์ฝ๋ ๋ณํ์ ์ฒ๋ฆฌํ์ง ๋ชปํ ์ ์์ต๋๋ค.
- ๊ตฌ์ฑ ํ์: IDE์ ๋ฆฐํฐ์ ์ ์ ํ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค.
4. ์์ฉ ๋ฆฌํฉํ ๋ง ๋๊ตฌ
React ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์๋ํํ๊ธฐ ์ํ ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ์ฌ๋ฌ ์์ฉ ๋ฆฌํฉํ ๋ง ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์ข ์ข ์ ๊ตํ ์ฝ๋ ๋ถ์ ๋ฐ ๋ณํ ๊ธฐ๋ฅ์ ๋ฌผ๋ก ๋ค์ํ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ง์์ ์ ๊ณตํฉ๋๋ค.
์ด์ :
- ๊ณ ๊ธ ๊ธฐ๋ฅ: ๋ฌด๋ฃ ๋๊ตฌ๋ณด๋ค ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ํฌ๊ด์ ์ธ ์ง์: ๋ ๋์ ๋ฒ์์ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค.
- ์ ๋ด ์ง์: ์ข ์ข ๊ณต๊ธ์ ์ฒด์ ์ ๋ด ์ง์์ด ํฌํจ๋ฉ๋๋ค.
ํ๊ณ์ :
- ๋น์ฉ: ํนํ ๋๊ท๋ชจ ํ์ ๊ฒฝ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค.
- ๋ฒค๋ ์ข ์์ฑ: ๋ฒค๋ ์ข ์์ฑ์ ์ด๋ํ ์ ์์ต๋๋ค.
๋จ๊ณ๋ณ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ธ์ค
์ ํํ ์๋ํ ์ ๋ต์ ๊ด๊ณ์์ด ์ฑ๊ณต์ ์ํด์๋ ๊ตฌ์กฐํ๋ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ธ์ค๊ฐ ํ์์ ์ ๋๋ค.
- ๋ถ์ ๋ฐ ๊ณํ: ๋ง์ด๊ทธ๋ ์ด์ ํ ์ปดํฌ๋ํธ๋ฅผ ์๋ณํ๊ณ ๋ชฉํ ์ํคํ ์ฒ(์: ํ ์ ์ฌ์ฉํ๋ ํจ์ํ ์ปดํฌ๋ํธ)๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ ์ปดํฌ๋ํธ์ ์์กด์ฑ๊ณผ ๋ณต์ก์ฑ์ ๋ถ์ํฉ๋๋ค.
- ํ ์คํธ: ๋ง์ด๊ทธ๋ ์ด์ ๋ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ํฌ๊ด์ ์ธ ๋จ์ ๋ฐ ํตํฉ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ฝ๋ ๋ณํ: ์ ํํ ์๋ํ ์ ๋ต์ ์ ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋ณํํฉ๋๋ค.
- ๊ฒํ ๋ฐ ๊ฐ์ : ๋ณํ๋ ์ฝ๋๋ฅผ ๊ฒํ ํ๊ณ ํ์ํ ๊ฐ์ ์์ ์ ์ํํฉ๋๋ค.
- ํ ์คํธ (๋ค์): ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๊ธฐ ์ํด ํ ์คํธ๋ฅผ ๋ค์ ์คํํฉ๋๋ค.
- ๋ฐฐํฌ: ํ๋ก๋์ ์ ๋ฐฐํฌํ๊ธฐ ์ ์ ์ถ๊ฐ ํ ์คํธ๋ฅผ ์ํด ๋ง์ด๊ทธ๋ ์ด์ ๋ ์ปดํฌ๋ํธ๋ฅผ ์คํ ์ด์ง ํ๊ฒฝ์ ๋ฐฐํฌํฉ๋๋ค.
- ๋ชจ๋ํฐ๋ง: ํ๋ก๋์ ํ๊ฒฝ์์ ๋ง์ด๊ทธ๋ ์ด์ ๋ ์ปดํฌ๋ํธ์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
์๋ํ๋ ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ฑ๊ณต์ ์ด๊ณ ํจ์จ์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ์๊ฒ ์์ํ๊ธฐ: ์ ์ ์์ ์ปดํฌ๋ํธ๋ก ์์ํ์ฌ ๊ฒฝํ์ ์์ผ๋ฉด์ ์ ์ฐจ ๋ ๋ง์ ์ปดํฌ๋ํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค.
- ์ปดํฌ๋ํธ ์ฐ์ ์์ ์ง์ : ๋ณต์ก์ฑ, ์ํฅ, ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ์ฌ์ ์ด์ ์ ๊ธฐ์ค์ผ๋ก ์ปดํฌ๋ํธ์ ์ฐ์ ์์๋ฅผ ์ ํฉ๋๋ค.
- ํ ์คํธ ์์ฑ: ๋ง์ด๊ทธ๋ ์ด์ ๋ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ํฌ๊ด์ ์ธ ๋จ์ ๋ฐ ํตํฉ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ฝ๋ ๋ฆฌ๋ทฐ: ์ค๋ฅ๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ์ํด ์ฒ ์ ํ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํํฉ๋๋ค.
- ์ง์์ ํตํฉ: ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ธ์ค๋ฅผ ์ง์์ ํตํฉ ํ์ดํ๋ผ์ธ์ ํตํฉํ์ฌ ํ ์คํธ์ ๋ฐฐํฌ๋ฅผ ์๋ํํฉ๋๋ค.
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ์ฑ๋ฅ ์ ํ๋ฅผ ์๋ณํ๊ธฐ ์ํด ๋ง์ด๊ทธ๋ ์ด์ ๋ ์ปดํฌ๋ํธ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
- ๋ณ๊ฒฝ ์ฌํญ ๋ฌธ์ํ: ๋ช ํํ ๊ฐ์ฌ ์ถ์ ์ ์ ๊ณตํ๊ณ ํฅํ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์์ ๋ณ๊ฒฝ๋ ์ฌํญ์ ๋ฌธ์ํํฉ๋๋ค.
- ์ ์ง์ ๋ง์ด๊ทธ๋ ์ด์ : ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ฐฉํดํ์ง ์๊ณ ๋ฒ๊ทธ ๋ฐ์ ์ํ์ ์ต์ํํ๊ธฐ ์ํด ์ปดํฌ๋ํธ๋ฅผ ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค.
- ๊ธฐ๋ฅ ํ๋๊ทธ ์ฌ์ฉ: ๊ธฐ๋ฅ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ๋ ์ปดํฌ๋ํธ๋ฅผ ํ์ฑํ ๋๋ ๋นํ์ฑํํ์ฌ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ์ฃผ์ง ์๊ณ ํ๋ก๋์ ์์ ํ ์คํธํ ์ ์์ต๋๋ค.
- ์ปค๋ฎค๋์ผ์ด์ : ๋ชจ๋ ์ฌ๋์ด ๋ณ๊ฒฝ ์ฌํญ๊ณผ ์ ์ฌ์ ์ํฅ์ ์ธ์งํ ์ ์๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ๊ณํ๊ณผ ์งํ ์ํฉ์ ํ๊ณผ ์ํตํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ณผ์ ์ ํด๊ฒฐ์ฑ
์๋ํ๋ ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ช ๊ฐ์ง ๊ณผ์ ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ๋ค์์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ์ ์ฌ์ ์ธ ํด๊ฒฐ์ฑ ์ ๋๋ค.
- ๋ณต์กํ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋: ๋ณต์กํ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋(์:
componentDidUpdate)๋ฅผ ํ ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ณต์กํ ๋ก์ง์ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ํ ์ผ๋ก ๋๋๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. - ์ํ ๊ด๋ฆฌ: ํด๋์ค ์ปดํฌ๋ํธ์์ ํ
์ ์ฌ์ฉํ๋ ํจ์ํ ์ปดํฌ๋ํธ๋ก ์ํ ๊ด๋ฆฌ ๋ก์ง์ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ค๋ฉด ์ํ ๊ด๋ฆฌ ์ํคํ
์ฒ๋ฅผ ๋ฆฌํฉํ ๋งํด์ผ ํ ์ ์์ต๋๋ค.
useState,useReducer๋๋ Redux๋ Zustand์ ๊ฐ์ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค. - ์ปจํ
์คํธ ์ฌ์ฉ: ํด๋์ค ์ปดํฌ๋ํธ์์ ํจ์ํ ์ปดํฌ๋ํธ๋ก ์ปจํ
์คํธ ์ฌ์ฉ์ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ค๋ฉด
useContextํ ์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค. - ํ ์คํธ ๊ณผ์ : ๋ง์ด๊ทธ๋ ์ด์ ๋ ์ปดํฌ๋ํธ๋ฅผ ํ ์คํธํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ผ๋ฉฐ, ํนํ ์๋ณธ ์ปดํฌ๋ํธ์ ํฌ๊ด์ ์ธ ํ ์คํธ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ๋ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒ ์ ํ ๋จ์ ๋ฐ ํตํฉ ํ ์คํธ ์์ฑ์ ํฌ์ํ์ญ์์ค.
- ์ฑ๋ฅ ์ ํ: ์ปดํฌ๋ํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด ๋๋๋ก ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ๋ ์ปดํฌ๋ํธ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ํ์์ ๋ฐ๋ผ ์ต์ ํํ์ญ์์ค.
- ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ๋ง์ด๊ทธ๋ ์ด์ ์ค์ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ํธํ์ฑ์ ํ์ธํ๊ณ ํ์์ ๋ฐ๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ์ญ์์ค.
๊ฒฐ๋ก
React ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์
์ ์๋ํํ๋ ๊ฒ์ ๋ ๊ฑฐ์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํ๋ํํ๊ณ , ์ฑ๋ฅ์ ๊ฐ์ ํ๋ฉฐ, ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๋ ๊ฐ์น ์๋ ์ ๋ต์
๋๋ค. jscodeshift, ESLint, ์๋ ๋ฆฌํฉํ ๋ง ๋๊ตฌ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ํ์ ๋ ๊ฑฐ์ ์ปดํฌ๋ํธ๋ฅผ ํ
์ ์ฌ์ฉํ๋ ์ต์ ํจ์ํ ์ปดํฌ๋ํธ๋ก ํจ์จ์ ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ๋ชจ๋ฒ ์ฌ๋ก์ ์ ์คํ ๊ณํ์ ๊ฒฐํฉํ ๊ตฌ์กฐํ๋ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ก์ธ์ค๋ ์ํํ๊ณ ์ฑ๊ณต์ ์ธ ์ ํ์ ๋ณด์ฅํฉ๋๋ค. ์๋ํ๋ฅผ ์์ฉํ์ฌ React ์ ํ๋ฆฌ์ผ์ด์
์ ์ต์ ์ํ๋ก ์ ์งํ๊ณ ๋์์์ด ์งํํ๋ ์น ๊ฐ๋ฐ ์ธ๊ณ์์ ๊ฒฝ์ ์ฐ์๋ฅผ ์ ์งํ์ญ์์ค.